home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2008 February / PCWFEB08.iso / Software / Freeware / Miro 1.0 / Miro_Installer.exe / Miro_Downloader.exe / encodings / utf_8_sig.pyc (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2007-11-12  |  4.1 KB  |  117 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.5)
  3.  
  4. """ Python 'utf-8-sig' Codec
  5. This work similar to UTF-8 with the following changes:
  6.  
  7. * On encoding/writing a UTF-8 encoded BOM will be prepended/written as the
  8.   first three bytes.
  9.  
  10. * On decoding/reading if the first three bytes are a UTF-8 encoded BOM, these
  11.   bytes will be skipped.
  12. """
  13. import codecs
  14.  
  15. def encode(input, errors = 'strict'):
  16.     return (codecs.BOM_UTF8 + codecs.utf_8_encode(input, errors)[0], len(input))
  17.  
  18.  
  19. def decode(input, errors = 'strict'):
  20.     prefix = 0
  21.     if input.startswith(codecs.BOM_UTF8):
  22.         input = input[3:]
  23.         prefix = 3
  24.     
  25.     (output, consumed) = codecs.utf_8_decode(input, errors, True)
  26.     return (output, consumed + prefix)
  27.  
  28.  
  29. class IncrementalEncoder(codecs.IncrementalEncoder):
  30.     
  31.     def __init__(self, errors = 'strict'):
  32.         codecs.IncrementalEncoder.__init__(self, errors)
  33.         self.first = True
  34.  
  35.     
  36.     def encode(self, input, final = False):
  37.         if self.first:
  38.             self.first = False
  39.             return codecs.BOM_UTF8 + codecs.utf_8_encode(input, self.errors)[0]
  40.         else:
  41.             return codecs.utf_8_encode(input, self.errors)[0]
  42.  
  43.     
  44.     def reset(self):
  45.         codecs.IncrementalEncoder.reset(self)
  46.         self.first = True
  47.  
  48.  
  49.  
  50. class IncrementalDecoder(codecs.BufferedIncrementalDecoder):
  51.     
  52.     def __init__(self, errors = 'strict'):
  53.         codecs.BufferedIncrementalDecoder.__init__(self, errors)
  54.         self.first = True
  55.  
  56.     
  57.     def _buffer_decode(self, input, errors, final):
  58.         if self.first and codecs.BOM_UTF8.startswith(input):
  59.             if len(input) < 3:
  60.                 return (u'', 0)
  61.             
  62.             (output, consumed) = codecs.utf_8_decode(input[3:], errors, final)
  63.             self.first = False
  64.             return (output, consumed + 3)
  65.         
  66.         return codecs.utf_8_decode(input, errors, final)
  67.  
  68.     
  69.     def reset(self):
  70.         codecs.BufferedIncrementalDecoder.reset(self)
  71.         self.first = True
  72.  
  73.  
  74.  
  75. class StreamWriter(codecs.StreamWriter):
  76.     
  77.     def reset(self):
  78.         codecs.StreamWriter.reset(self)
  79.         
  80.         try:
  81.             del self.encode
  82.         except AttributeError:
  83.             pass
  84.  
  85.  
  86.     
  87.     def encode(self, input, errors = 'strict'):
  88.         self.encode = codecs.utf_8_encode
  89.         return encode(input, errors)
  90.  
  91.  
  92.  
  93. class StreamReader(codecs.StreamReader):
  94.     
  95.     def reset(self):
  96.         codecs.StreamReader.reset(self)
  97.         
  98.         try:
  99.             del self.decode
  100.         except AttributeError:
  101.             pass
  102.  
  103.  
  104.     
  105.     def decode(self, input, errors = 'strict'):
  106.         if len(input) < 3 and codecs.BOM_UTF8.startswith(input):
  107.             return (u'', 0)
  108.         
  109.         self.decode = codecs.utf_8_decode
  110.         return decode(input, errors)
  111.  
  112.  
  113.  
  114. def getregentry():
  115.     return codecs.CodecInfo(name = 'utf-8-sig', encode = encode, decode = decode, incrementalencoder = IncrementalEncoder, incrementaldecoder = IncrementalDecoder, streamreader = StreamReader, streamwriter = StreamWriter)
  116.  
  117.